home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2001 September / PC-WELT 9-2001.ISO / software / hw / brennen / flask_src.exe / Video / global.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-06-26  |  13.8 KB  |  510 lines

  1. /* global.h, global variables                                               */
  2.  
  3. /* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
  4.  
  5. /*
  6.  * Disclaimer of Warranty
  7.  *
  8.  * These software programs are available to the user without any license fee or
  9.  * royalty on an "as is" basis.  The MPEG Software Simulation Group disclaims
  10.  * any and all warranties, whether express, implied, or statuary, including any
  11.  * implied warranties or merchantability or of fitness for a particular
  12.  * purpose.  In no event shall the copyright-holder be liable for any
  13.  * incidental, punitive, or consequential damages of any kind whatsoever
  14.  * arising from the use of these programs.
  15.  *
  16.  * This disclaimer of warranty extends to the user of these programs and user's
  17.  * customers, employees, agents, transferees, successors, and assigns.
  18.  *
  19.  * The MPEG Software Simulation Group does not represent or warrant that the
  20.  * programs furnished hereunder are free of infringement of any third-party
  21.  * patents.
  22.  *
  23.  * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
  24.  * are subject to royalty fees to patent holders.  Many of these patents are
  25.  * general enough such that they are unavoidable regardless of implementation
  26.  * design.
  27.  *
  28.  */
  29. #include <windows.h>
  30. #include <winbase.h>
  31. #include <wingdi.h>
  32. #include <stdio.h>
  33. #include <stdlib.h>
  34. #include <fcntl.h>
  35.  
  36. //#include "..\flaskmpeg.h"
  37. #include "..\Video\mpeg2dec.h"
  38. //Premiere Includes
  39. //#include "..\Premiere\prTypes.h"
  40. //#include "..\Premiere\prCompile.h"
  41. //#include "..\Premiere\prWinEnv.h"
  42. //#include  "..\Premiere\premiere.h"
  43. //#include  "config.h"
  44. #include <io.h>
  45.  
  46. /* choose between declaration (GLOBAL undefined)
  47.  * and definition (GLOBAL defined)
  48.  * GLOBAL is defined in exactly one file mpeg2dec.c)
  49.  */
  50.  
  51. #ifndef GLOBAL
  52. #define EXTERN extern
  53. #else
  54. #define EXTERN 
  55. #endif
  56.  
  57. /* prototypes of global functions */
  58. /* readpic.c */
  59. void Substitute_Frame_Buffer _ANSI_ARGS_ ((int bitstream_framenum, 
  60.   int sequence_framenum));
  61.  
  62. /* Get_Bits.c */
  63.  
  64. void  Initialize_Buffer _ANSI_ARGS_((void));
  65. void Fill_Buffer _ANSI_ARGS_((void));
  66. unsigned int Show_Bits _ANSI_ARGS_((int n));
  67. unsigned int Get_Bits1 _ANSI_ARGS_((void));
  68. void Flush_Buffer _ANSI_ARGS_((int n));
  69. unsigned int Get_Bits _ANSI_ARGS_((int n));
  70. int Get_Byte _ANSI_ARGS_((void));
  71. int Get_Word _ANSI_ARGS_((void));
  72. EXTERN  int VIDEO_BUFFER_SIZE;
  73. /* systems.c */
  74. void Next_Packet _ANSI_ARGS_((void));
  75. int Get_Long _ANSI_ARGS_((void));
  76. void Flush_Buffer32 _ANSI_ARGS_((void));
  77. unsigned int Get_Bits32 _ANSI_ARGS_((void));
  78.  
  79.  
  80. /* getblk.c */
  81. void Decode_MPEG1_Intra_Block _ANSI_ARGS_((int comp, int dc_dct_pred[]));
  82. void Decode_MPEG1_Non_Intra_Block _ANSI_ARGS_((int comp));
  83. void Decode_MPEG2_Intra_Block _ANSI_ARGS_((int comp, int dc_dct_pred[]));
  84. void Decode_MPEG2_Non_Intra_Block _ANSI_ARGS_((int comp));
  85.  
  86. /* gethdr.c */
  87. int Get_Hdr _ANSI_ARGS_((void));
  88. void next_start_code _ANSI_ARGS_((void));
  89. int slice_header _ANSI_ARGS_((void));
  90. void marker_bit _ANSI_ARGS_((char *text));
  91. EXTERN int gop_count;
  92. EXTERN int gopPreviousPos;
  93.  
  94. /* getpic.c */
  95. int  Decode_Picture _ANSI_ARGS_((int bitstream_framenum, 
  96.   int sequence_framenum));
  97. void Output_Last_Frame_of_Sequence _ANSI_ARGS_((int framenum));
  98.  
  99. /* getvlc.c */
  100. int Get_macroblock_type _ANSI_ARGS_((void));
  101. int Get_motion_code _ANSI_ARGS_((void));
  102. int Get_dmvector _ANSI_ARGS_((void));
  103. int Get_coded_block_pattern _ANSI_ARGS_((void));
  104. int Get_macroblock_address_increment _ANSI_ARGS_((void));
  105. int Get_Luma_DC_dct_diff _ANSI_ARGS_((void));
  106. int Get_Chroma_DC_dct_diff _ANSI_ARGS_((void));
  107.  
  108. /* idct.c */
  109. void Fast_IDCT _ANSI_ARGS_((short *block));
  110. void Initialize_Fast_IDCT _ANSI_ARGS_((void));
  111.  
  112. void idct_mmx_32 _ANSI_ARGS_((short *block));
  113.  
  114. /* Reference_IDCT.c */
  115. void Initialize_Reference_IDCT _ANSI_ARGS_((void));
  116. void Reference_IDCT _ANSI_ARGS_((short *block));
  117.  
  118. /* motion.c */
  119. void motion_vectors _ANSI_ARGS_((int PMV[2][2][2], int dmvector[2],
  120.   int motion_vertical_field_select[2][2], int s, int motion_vector_count, 
  121.   int mv_format, int h_r_size, int v_r_size, int dmv, int mvscale));
  122. void motion_vector _ANSI_ARGS_((int *PMV, int *dmvector,
  123.   int h_r_size, int v_r_size, int dmv, int mvscale, int full_pel_vector));
  124. void Dual_Prime_Arithmetic _ANSI_ARGS_((int DMV[][2], int *dmvector, int mvx, int mvy));
  125.  
  126. /* mpeg2dec.c */
  127. void Error _ANSI_ARGS_((char *text));
  128. void Warning _ANSI_ARGS_((char *text));
  129. void Print_Bits _ANSI_ARGS_((int code, int bits, int len));
  130.  
  131. /* recon.c */
  132. void form_predictions _ANSI_ARGS_((int bx, int by, int macroblock_type, 
  133.   int motion_type, int PMV[2][2][2], int motion_vertical_field_select[2][2], 
  134.   int dmvector[2], int stwtype));
  135.  
  136. /* spatscal.c */
  137. void Spatial_Prediction _ANSI_ARGS_((void));
  138.  
  139. /* store.c */
  140. void Write_Frame _ANSI_ARGS_((unsigned char *src[], int frame));
  141.  
  142. #ifdef DISPLAY
  143. /* display.c */
  144. void Initialize_Display_Process _ANSI_ARGS_((char *name));
  145. void Terminate_Display_Process _ANSI_ARGS_((void));
  146. void Display_Second_Field _ANSI_ARGS_((void));
  147. void dither _ANSI_ARGS_((unsigned char *src[]));
  148. void Initialize_Dither_Matrix _ANSI_ARGS_((void));
  149. #endif
  150.  
  151. /* global variables */
  152.  
  153. EXTERN char Version[]
  154. #ifdef GLOBAL
  155.   ="mpeg2decode V1.2a, 96/07/19"
  156. #endif
  157. ;
  158.  
  159. EXTERN char Author[]
  160. #ifdef GLOBAL
  161.   ="(C) 1996, MPEG Software Simulation Group"
  162. #endif
  163. ;
  164.  
  165.  
  166. /* zig-zag and alternate scan patterns */
  167. EXTERN unsigned char scan[2][64]
  168. #ifdef GLOBAL
  169. =
  170. {
  171.   { /* Zig-Zag scan pattern  */
  172.     0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,
  173.     12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,
  174.     35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,
  175.     58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63
  176.   },
  177.   { /* Alternate scan pattern */
  178.     0,8,16,24,1,9,2,10,17,25,32,40,48,56,57,49,
  179.     41,33,26,18,3,11,4,12,19,27,34,42,50,58,35,43,
  180.     51,59,20,28,5,13,6,14,21,29,36,44,52,60,37,45,
  181.     53,61,22,30,7,15,23,31,38,46,54,62,39,47,55,63
  182.   }
  183. }
  184. #endif
  185. ;
  186.  
  187. /* default intra quantization matrix */
  188. EXTERN unsigned char default_intra_quantizer_matrix[64]
  189. #ifdef GLOBAL
  190. =
  191. {
  192.   8, 16, 19, 22, 26, 27, 29, 34,
  193.   16, 16, 22, 24, 27, 29, 34, 37,
  194.   19, 22, 26, 27, 29, 34, 34, 38,
  195.   22, 22, 26, 27, 29, 34, 37, 40,
  196.   22, 26, 27, 29, 32, 35, 40, 48,
  197.   26, 27, 29, 32, 35, 40, 48, 58,
  198.   26, 27, 29, 34, 38, 46, 56, 69,
  199.   27, 29, 35, 38, 46, 56, 69, 83
  200. }
  201. #endif
  202. ;
  203.  
  204. /* non-linear quantization coefficient table */
  205. EXTERN unsigned char Non_Linear_quantizer_scale[32]
  206. #ifdef GLOBAL
  207. =
  208. {
  209.    0, 1, 2, 3, 4, 5, 6, 7,
  210.    8,10,12,14,16,18,20,22,
  211.   24,28,32,36,40,44,48,52,
  212.   56,64,72,80,88,96,104,112
  213. }
  214. #endif
  215. ;
  216.  
  217. /* color space conversion coefficients
  218.  * for YCbCr -> RGB mapping
  219.  *
  220.  * entries are {crv,cbu,cgu,cgv}
  221.  *
  222.  * crv=(255/224)*65536*(1-cr)/0.5
  223.  * cbu=(255/224)*65536*(1-cb)/0.5
  224.  * cgu=(255/224)*65536*(cb/cg)*(1-cb)/0.5
  225.  * cgv=(255/224)*65536*(cr/cg)*(1-cr)/0.5
  226.  *
  227.  * where Y=cr*R+cg*G+cb*B (cr+cg+cb=1)
  228.  */
  229.  
  230. /* ISO/IEC 13818-2 section 6.3.6 sequence_display_extension() */
  231.  
  232. EXTERN int Inverse_Table_6_9[8][4]
  233. #ifdef GLOBAL
  234. =
  235. {
  236.   {117504, 138453, 13954, 34903}, /* no sequence_display_extension */
  237.   {117504, 138453, 13954, 34903}, /* ITU-R Rec. 709 (1990) */
  238.   {104597, 132201, 25675, 53279}, /* unspecified */
  239.   {104597, 132201, 25675, 53279}, /* reserved */
  240.   {104448, 132798, 24759, 53109}, /* FCC */
  241.   {104597, 132201, 25675, 53279}, /* ITU-R Rec. 624-4 System B, G */
  242.   {104597, 132201, 25675, 53279}, /* SMPTE 170M */
  243.   {117579, 136230, 16907, 35559}  /* SMPTE 240M (1987) */
  244. }
  245. #endif
  246. ;
  247.  
  248.  
  249.  
  250.  
  251. EXTERN unsigned char* DibArray;
  252.  
  253. /* output types (Output_Type) */
  254. #define T_YUV   0
  255. #define T_SIF   1
  256. #define T_TGA   2
  257. #define T_PPM   3
  258. #define T_X11   4
  259. #define T_X11HIQ 5
  260.  
  261. /* decoder operation control variables */
  262. EXTERN int Output_Type;
  263. EXTERN int hiQdither;
  264.  
  265.  
  266. /* decoder operation control flags */
  267. EXTERN int Quiet_Flag;
  268. EXTERN int Trace_Flag;
  269. EXTERN int Fault_Flag;
  270. EXTERN int Verbose_Flag;
  271. EXTERN int Two_Streams;
  272. EXTERN int Spatial_Flag;
  273. EXTERN int Frame_Store_Flag;
  274. EXTERN int System_Stream_Flag;
  275. EXTERN int Display_Progressive_Flag;
  276. EXTERN int Ersatz_Flag;
  277. EXTERN int Big_Picture_Flag;
  278. EXTERN int Verify_Flag;
  279. EXTERN int Stats_Flag;
  280. EXTERN int User_Data_Flag;
  281. EXTERN int Main_Bitstream_Flag;
  282.  
  283.  
  284. /* filenames */
  285. EXTERN char *Output_Picture_Filename;
  286. EXTERN char *Substitute_Picture_Filename;
  287. EXTERN char *Main_Bitstream_Filename; 
  288. EXTERN char *Enhancement_Layer_Bitstream_Filename; 
  289.  
  290.  
  291.  
  292. /* buffers for multiuse purposes */
  293. EXTERN char Error_Text[256];
  294. EXTERN unsigned char *Clip;
  295.  
  296. /* pointers to generic picture buffers */
  297. EXTERN unsigned char *backward_reference_frame[3];
  298. EXTERN unsigned char *forward_reference_frame[3];
  299.  
  300. EXTERN unsigned char *auxframe[3];
  301. EXTERN unsigned char *current_frame[3];
  302. EXTERN unsigned char *substitute_frame[3];
  303.  
  304.  
  305. /* pointers to scalability picture buffers */
  306. EXTERN unsigned char *llframe0[3];
  307. EXTERN unsigned char *llframe1[3];
  308.  
  309. EXTERN short *lltmp;
  310. EXTERN char *Lower_Layer_Picture_Filename;
  311.  
  312.  
  313.  
  314.  
  315. /* non-normative variables derived from normative elements */
  316. EXTERN int Coded_Picture_Width;
  317. EXTERN int Coded_Picture_Height;
  318. EXTERN int Chroma_Width;
  319. EXTERN int Chroma_Height;
  320. EXTERN int block_count;
  321. EXTERN int Second_Field;
  322. EXTERN int profile, level;
  323.  
  324. /* normative derived variables (as per ISO/IEC 13818-2) */
  325. EXTERN int horizontal_size;
  326. EXTERN int vertical_size;
  327. EXTERN int mb_width;
  328. EXTERN int mb_height;
  329. EXTERN double bit_rate;
  330. EXTERN double frame_rate; 
  331.  
  332.  
  333.  
  334. /* headers */
  335.  
  336. /* ISO/IEC 13818-2 section 6.2.2.1:  sequence_header() */
  337. EXTERN int aspect_ratio_information;
  338. EXTERN int frame_rate_code; 
  339. EXTERN int bit_rate_value; 
  340. EXTERN int vbv_buffer_size;
  341. EXTERN int constrained_parameters_flag;
  342.  
  343. /* ISO/IEC 13818-2 section 6.2.2.3:  sequence_extension() */
  344. EXTERN int profile_and_level_indication;
  345. EXTERN int progressive_sequence;
  346. EXTERN int chroma_format;
  347. EXTERN int low_delay;
  348. EXTERN int frame_rate_extension_n;
  349. EXTERN int frame_rate_extension_d;
  350.  
  351. /* ISO/IEC 13818-2 section 6.2.2.4:  sequence_display_extension() */
  352. EXTERN int video_format;  
  353. EXTERN int color_description;
  354. EXTERN int color_primaries;
  355. EXTERN int transfer_characteristics;
  356. EXTERN int matrix_coefficients;
  357. EXTERN int display_horizontal_size;
  358. EXTERN int display_vertical_size;
  359.  
  360. /* ISO/IEC 13818-2 section 6.2.3: picture_header() */
  361. EXTERN int temporal_reference;
  362. EXTERN int picture_coding_type;
  363. EXTERN int vbv_delay;
  364. EXTERN int full_pel_forward_vector;
  365. EXTERN int forward_f_code;
  366. EXTERN int full_pel_backward_vector;
  367. EXTERN int backward_f_code;
  368.  
  369.  
  370. /* ISO/IEC 13818-2 section 6.2.3.1: picture_coding_extension() header */
  371. EXTERN int f_code[2][2];
  372. EXTERN int intra_dc_precision;
  373. EXTERN int picture_structure;
  374. EXTERN int top_field_first;
  375. EXTERN int frame_pred_frame_dct;
  376. EXTERN int concealment_motion_vectors;
  377.  
  378. EXTERN int intra_vlc_format;
  379.  
  380. EXTERN int repeat_first_field;
  381.  
  382. EXTERN int chroma_420_type;
  383. EXTERN int progressive_frame;
  384. EXTERN int composite_display_flag;
  385. EXTERN int v_axis;
  386. EXTERN int field_sequence;
  387. EXTERN int sub_carrier;
  388. EXTERN int burst_amplitude;
  389. EXTERN int sub_carrier_phase;
  390.  
  391.  
  392.  
  393. /* ISO/IEC 13818-2 section 6.2.3.3: picture_display_extension() header */
  394. EXTERN int frame_center_horizontal_offset[3];
  395. EXTERN int frame_center_vertical_offset[3];
  396.  
  397.  
  398.  
  399. /* ISO/IEC 13818-2 section 6.2.2.5: sequence_scalable_extension() header */
  400. EXTERN int layer_id;
  401. EXTERN int lower_layer_prediction_horizontal_size;
  402. EXTERN int lower_layer_prediction_vertical_size;
  403. EXTERN int horizontal_subsampling_factor_m;
  404. EXTERN int horizontal_subsampling_factor_n;
  405. EXTERN int vertical_subsampling_factor_m;
  406. EXTERN int vertical_subsampling_factor_n;
  407.  
  408.  
  409. /* ISO/IEC 13818-2 section 6.2.3.5: picture_spatial_scalable_extension() header */
  410. EXTERN int lower_layer_temporal_reference;
  411. EXTERN int lower_layer_horizontal_offset;
  412. EXTERN int lower_layer_vertical_offset;
  413. EXTERN int spatial_temporal_weight_code_table_index;
  414. EXTERN int lower_layer_progressive_frame;
  415. EXTERN int lower_layer_deinterlaced_field_select;
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422. /* ISO/IEC 13818-2 section 6.2.3.6: copyright_extension() header */
  423. EXTERN int copyright_flag;
  424. EXTERN int copyright_identifier;
  425. EXTERN int original_or_copy;
  426. EXTERN int copyright_number_1;
  427. EXTERN int copyright_number_2;
  428. EXTERN int copyright_number_3;
  429.  
  430. /* ISO/IEC 13818-2 section 6.2.2.6: group_of_pictures_header()  */
  431. EXTERN int drop_flag;
  432. EXTERN int hour;
  433. EXTERN int minute;
  434. EXTERN int sec;
  435. EXTERN int frame;
  436. EXTERN int closed_gop;
  437. EXTERN int broken_link;
  438.  
  439.  
  440.  
  441. /* layer specific variables (needed for SNR and DP scalability) */
  442. EXTERN struct layer_data {
  443.   /* bit input */
  444.   int Infile;
  445.   unsigned char *Rdbfr;
  446.   unsigned char *Rdptr;
  447.   unsigned char Inbfr[16];
  448.   /* from mpeg2play */
  449.   unsigned int Bfr;
  450.   unsigned char *Rdmax;
  451.   int Incnt;
  452.   int Bitcnt;
  453.   /* sequence header and quant_matrix_extension() */
  454.   int intra_quantizer_matrix[64];
  455.   int non_intra_quantizer_matrix[64];
  456.   int chroma_intra_quantizer_matrix[64];
  457.   int chroma_non_intra_quantizer_matrix[64];
  458.   
  459.   int load_intra_quantizer_matrix;
  460.   int load_non_intra_quantizer_matrix;
  461.   int load_chroma_intra_quantizer_matrix;
  462.   int load_chroma_non_intra_quantizer_matrix;
  463.  
  464.   int MPEG2_Flag;
  465.   /* sequence scalable extension */
  466.   int scalable_mode;
  467.   /* picture coding extension */
  468.   int q_scale_type;
  469.   int alternate_scan;
  470.   /* picture spatial scalable extension */
  471.   int pict_scal;
  472.   /* slice/macroblock */
  473.   int priority_breakpoint;
  474.   int quantizer_scale;
  475.   int intra_slice;
  476.   short block[12][64];
  477. } base, enhan, *ld;
  478.  
  479.  
  480.  
  481. #ifdef VERIFY
  482. EXTERN int verify_sequence_header;
  483. EXTERN int verify_group_of_pictures_header;
  484. EXTERN int verify_picture_header;
  485. EXTERN int verify_slice_header;
  486. EXTERN int verify_sequence_extension;
  487. EXTERN int verify_sequence_display_extension;
  488. EXTERN int verify_quant_matrix_extension;
  489. EXTERN int verify_sequence_scalable_extension;
  490. EXTERN int verify_picture_display_extension;
  491. EXTERN int verify_picture_coding_extension;
  492. EXTERN int verify_picture_spatial_scalable_extension;
  493. EXTERN int verify_picture_temporal_scalable_extension;
  494. EXTERN int verify_copyright_extension;
  495. #endif /* VERIFY */
  496.  
  497.  
  498. EXTERN int Decode_Layer;
  499.  
  500. /* verify.c */
  501. #ifdef VERIFY
  502. void Check_Headers _ANSI_ARGS_((int Bitstream_Framenum, int Sequence_Framenum));
  503. void Clear_Verify_Headers _ANSI_ARGS_((void));
  504. #endif /* VERIFY */
  505.  
  506.  
  507. EXTERN int global_MBA;
  508. EXTERN int global_pic;
  509. EXTERN int True_Framenum;
  510.